package operator;

//运算符的使用
public class Operator {
    public static void main(String[] args) {
        //算术运算符
        //基本四则运算符
//        int a = 20;
//        int b = 10;
//        int c = 0;
//        System.out.println(a + b);//30
//        System.out.println(a - b);//10
//        System.out.println(a * b);//200
//        System.out.println(a / b);//2
//        System.out.println(a % b);//0
//        System.out.println(a / 0);//当取模或者进行除法运算时，被操作数不能为0
//        System.out.println(a % 0);//也能对小数进行取模运算，但是没有意义

        //增量运算符
//        int a = 1;
//        a += 3;//相当于a = a + 3,即a = 1 + 3
//        System.out.println(a);//4
//        int b = 5;
//        b -= 1;//相当于b = b - 1,即b = 5 - 1
//        System.out.println(b);//4
//        int c = 2;
//        c *= 3;//相当于c = c * 3,即c = 2 * 3
//        System.out.println(c);//6
//        int d =10;
//        d /= 5;//相当于d = d / 5,即d = 10 / 5
//        System.out.println(d);//2
//        int e = 11;
//        e %= 2;//相当于e = e % 2,即e = 11 % 2
//        System.out.println(e);//1

        //自增/自减运算符
//        int a = 5;
//        System.out.println(a++);//5  后置++，先进行输出再进行++
//        System.out.println(++a);//7  前置++，先进行++后进行输出

        //关系运算符
//        int a = 10;
//        int b = 20;
//        System.out.println(a == b);//false
//        System.out.println(a != b);//true
//        System.out.println(a <= b);//true
//        System.out.println(a >= b);//false
//        System.out.println(a < b);//true
//        System.out.println(a > b);//false
//        int c = 5;
//        double d = 5.4;//int与double可以进行比较，都是数值型
//        System.out.println(c == d);//false
//        System.out.println(c <= d);//true
//        char e = 'a';
//        int n = 30;//char和int也可以进行比较，但是比较会把‘a’看成‘a’的编码进行比较
//        System.out.println(e == n);//false

        //逻辑运算符
//        int a = 1;
//        int b = 2;
//        System.out.println(a == 1 && b == 2);//true
//        System.out.println(a > 1 && b == 2);//false
//        System.out.println(a < 1 && b > 2);//false
//        System.out.println(a == 1 || b == 2);//true
//        System.out.println(a == 1 || b > 2);//true
//        System.out.println(a < 1 || b < 2);//false
//        System.out.println(!(a == 1));//false
//        System.out.println(!(b != 2));//true
//        //按照标准来说10 / 0应该会出错，但是在该程序中并没有抛出异常，是因为||和&&遵守短路求值的规则，对于||来说第一个表达式为真时则不计算第二个表达式的真假，直接返回结果真；对于&&来说，如果第一个表达式为假则不计算第二个表达式的真假，直接返回结果假
//        System.out.println(10 == 10 || 10 / 0 == 0);//true
//        System.out.println(10 > 20 && 10 / 0 == 0);//false

        //位运算符
//        int a = 10;//0000 1010
//        int b = 20;//0001 0100
//        System.out.println(a & b);//0000 0000
//        System.out.println(a | b);//0001 1110 = 30
//        System.out.println(~a);//包括符号位按位取反  -11
//        System.out.println(~b);//包括符号位按位取反  -21
//        System.out.println(a ^ b);//0001 1110 = 30

        //移位运算符
//        int a = 10;
//        System.out.println(a << 2);//0000 0000 0000 0000 0000 0000 0000 1010 -> 00 0000 0000 0000 0000 0000 0000 1010 00 = 40
//        System.out.println(a >> 2);//0000 0000 0000 0000 0000 0000 0000 1010 -> 00 0000 0000 0000 0000 0000 0000 0010 10 = 2

        //条件运算符
//        int a = 10;
//        int b = 20;
//        int max = a > b ? a : b;
////        a > b ? a : b 不能单独存在，会报错
//        System.out.println(max);

        //运算符优先级
        int a = 20;
        int b = 10;
        //结果为60 -> a + (a - b) = 30,30 << 1 = 60    左移一位相当于 * 2，右移一位相当于 / 2
        System.out.println(a + (a - b) << 1);
        //结果时40 -> (a - b) << 1 = 10 << 1 = 20,20 + 20 = 40
        System.out.println(a + ((a - b) << 1));
    }
}
